package com.woniu113.junk.user.consumer;

import com.woniu113.junk.commons.util.RedisUtil;
import com.woniu113.junk.user.util.RedisKeyUtil;
import com.woniu113.junk.user.util.SMSUtil;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@RabbitListener(queues = "user_up_phone_queue")
@Component
public class UserUpPhoneQueueConsumer {
    @Resource
    private RedisUtil redisUtil;
    @Resource
    private SMSUtil smsUtil;

    @RabbitHandler
    public void sendCode(String userPhone) throws Exception{
        System.out.println("取出队列中的数据进行消费"+userPhone);

        String code = smsUtil.sendCode(userPhone);//发送验证码,返回发送的验证码code
        //将验证码保存在redis中,并设置有效时间
        redisUtil.set(RedisKeyUtil.USER_UP_CODE_KEY(userPhone),code, 300);
        //发送完验证码之后向redis保存一条数据有效期是一分钟
        redisUtil.set(RedisKeyUtil.USER_UP_CODE_SENT(userPhone),"", 60);//所以在发送验证码之前应该先判断一分钟之内是否发送过验证码
        //发送验证码之后记录发送次数+1(则在发送验证码之前应当判断在一小时内的发送次数是否超过上限)
        if(!redisUtil.exists(RedisKeyUtil.SENT_USER_UP_CODE_NUMBER(userPhone))){//不存在
            redisUtil.set(RedisKeyUtil.SENT_USER_UP_CODE_NUMBER(userPhone),"1", 60*60);
        }else {
            redisUtil.increment(RedisKeyUtil.SENT_USER_UP_CODE_NUMBER(userPhone));
        }
    }
}
